/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import Dao.DeportistaJpaController;
import Dao.exceptions.IllegalOrphanException;
import Dao.exceptions.NonexistentEntityException;
import Dao.exceptions.PreexistingEntityException;
import Logico.Deportista;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class ControladorDeportista {
    DeportistaJpaController daoDeportista;
    ConnectionFactory conection;

    public ControladorDeportista() {

        conection = new ConnectionFactory();
        daoDeportista = new DeportistaJpaController(conection.getFactory());
    }

    public boolean guardar(int cedula, String nombre, String apellidos, Date fechaNacimiento, String lugarNacimiento, String nacionalidad, String estatura, String peso, String foto) {

        boolean guardado = false;

        Deportista deportista = new Deportista();
        
        deportista.setCedula(cedula);
        deportista.setNombre(nombre);
        deportista.setApellidos(apellidos);
        deportista.setFechaNacimiento(fechaNacimiento);
        deportista.setLugarNacimiento(lugarNacimiento);
        deportista.setNacionalidad(nacionalidad);
        deportista.setEstatura(estatura);
        deportista.setPeso(peso);
        deportista.setFoto(foto);  
        
        try {
            daoDeportista.create(deportista);
            guardado = true;

        } catch (PreexistingEntityException ex) {
            JOptionPane.showMessageDialog(null, "Ya existe un Deportista con la cedula: " + cedula + ". Por favor inténtelo de nuevo");
        } catch (Exception ex) {
            Logger.getLogger(ControladorDeportista.class.getName()).log(Level.SEVERE, null, ex);
        }

        return guardado;
    }

    public boolean borrar(int cedula) {

        boolean borrado = false;

        try {

            daoDeportista.destroy(cedula);
            borrado = true;
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(ControladorDeportista.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(ControladorDeportista.class.getName()).log(Level.SEVERE, null, ex);
        }

        return borrado;
    }

    public boolean modificar(int cedula, String nombre, String apellidos, Date fechaNacimiento, String lugarNacimiento, String nacionalidad, String estatura, String peso, String foto) {

        boolean modificado = false;

        Deportista deportistaEncontrado = this.buscar(cedula);

        if (deportistaEncontrado != null) {

            deportistaEncontrado.setNombre(nombre);
            deportistaEncontrado.setApellidos(apellidos);
            deportistaEncontrado.setFechaNacimiento(fechaNacimiento);
            deportistaEncontrado.setLugarNacimiento(lugarNacimiento);
            deportistaEncontrado.setNacionalidad(nacionalidad);
            deportistaEncontrado.setEstatura(estatura);
            deportistaEncontrado.setPeso(peso);
            deportistaEncontrado.setFoto(foto); 

            try {

                daoDeportista.edit(deportistaEncontrado);
                modificado = true;
            } catch (IllegalOrphanException ex) {
                Logger.getLogger(ControladorDeportista.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(ControladorDeportista.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(ControladorDeportista.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            JOptionPane.showMessageDialog(null, "El Deportista no se encuentra en nuestro sistema.");
        }

        return modificado;
    }

    public Deportista buscar(int cedula) {

        return daoDeportista.findDeportista(cedula);
    }

    public List<Deportista> listarDeportistas() {

        return daoDeportista.findDeportistaEntities();
    }
}
